home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1997 September / Macworld (1997-09).dmg / Serious Software / Cherwell Scientific Demos / pro Fit / pro Fit 5.0 demo (fpu).sea / pro Fit 5.0 demo (fpu) / External Modules / External modules sources / Pascal / ProgramTemplate.p < prev    next >
Text File  |  1996-03-07  |  4KB  |  148 lines

  1. {************************************************************************************}
  2. {  ProgramTemplate.p                                                          }
  3. {  use this template to create an external program                              }
  4. {  06.03.96:    added some more uses for compatibility with MWerks                 }
  5. {  30.12.95:    compatibility with MWerks 7 (68k+PPC) and ThinkPascal                 }
  6. {  27.1.95:    added compatibility for Metrowerks pascal CW 5 and universal headers 2.0a3 }
  7. {  26.9.94:    original version for 4.2.0 }
  8. {************************************************************************************}
  9.  
  10.  
  11. unit user;
  12.  
  13. interface
  14. {$IFC UNDEFINED THINK_PASCAL }
  15.     uses
  16.         proFit_interface, Types, Events, TextUtils, Memory;
  17. {$ELSEC}
  18.     uses
  19.         proFit_interface;
  20. {$ENDC}
  21.  
  22.  
  23. {$MAIN}
  24.     procedure main (selector: integer; pb: ExtModulesParamBlockPtr);
  25.  
  26.  
  27.  
  28. implementation
  29.  
  30. { note: MPW users must make sure that the procedure main is at the beginning of the compiled code }
  31. { under Think Pascal, this is cared for by the compiler }
  32. { We let main call a function mainMain to make sure that the code starts with a jump to }
  33. { our entry point even when compiling under MPW Pascal }
  34.  
  35.     procedure mainMain (selector: integer; pb: ExtModulesParamBlockPtr);
  36.     forward;
  37.     procedure main (selector: integer; pb: ExtModulesParamBlockPtr);
  38.  
  39.     begin
  40.         mainMain(selector, pb);
  41.     end;
  42.  
  43.  
  44.  
  45. {************************************************************************************}
  46.  
  47.     procedure SetUp (var moduleKind: integer;    { set moduleKind to isFunction or isProgram }
  48.                                     var name: Str255;             { the name of the program or function }
  49.                                     var requiredGlobals: longint;     { the number of bytes to be allocated in ExtModulesParamBlock.globals }
  50.                                         { set requiredGlobals to 0 if you don't use this feature }
  51.                                     pb: ExtModulesParamBlockPtr);    { the complete parameter block passed by pro Fit to the }
  52.                                         { routines defined in this file. In most cases it can be ignored }
  53. { SetUp is called once when the external module is linked to pro Fit }
  54.     begin
  55.         moduleKind := isProgram;    { this is a program }
  56.         name := '';            { set this string to the name of the program }
  57.         requiredGlobals := 0;    {leave this like it is now if you don't need to allocate global variable}
  58.                         { space using a pointer.}
  59.                         { set this to a pointer size if you want to use}
  60.                         { the pointer "globals" provided in ExtModulesParamBlock}
  61.     end;
  62.  
  63.  
  64.  
  65. {************************************************************************************}
  66.  
  67.     procedure InitializeProg (pb: ExtModulesParamBlockPtr);
  68. { Can be left emtpy if not needed. }
  69. { called when the external module is linked to proFit after SetUp was called }
  70. { can be used to inititialize global variables, etc. }
  71.     begin
  72.     end;
  73.  
  74.  
  75.  
  76. {************************************************************************************}
  77.  
  78.     procedure Run (pb: ExtModulesParamBlockPtr);
  79. { pro Fit calls this function when the name of the program is chosen from the Misc Menu}
  80.     begin
  81.  
  82.     end;
  83.  
  84.  
  85.  
  86. {************************************************************************************}
  87.  
  88.     procedure CleanUp (pb: ExtModulesParamBlockPtr);
  89.     { called when the function or program is removed from pro Fit's menus }
  90.     { in most cases, this function can be empty }
  91.     begin
  92.     end;
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105. {***********************************************************************************************}
  106.  
  107. { This is the main procedure through which all calls to the external module go.                    }
  108. { Main takes care of calling the right procedure with the right parameters depending on        }
  109. { the value of "selector".                                                                            }
  110. { You don't need to touch this procedure                                                            }
  111.     procedure mainMain (selector: integer; pb: ExtModulesParamBlockPtr);
  112.         var
  113.             oldA4: longint;
  114.     begin
  115. {$IFC NOT UNDEFINED SET_A4}
  116.         oldA4 := SetCurrentA4;
  117. {$ENDC}
  118.         Startup(pb);
  119.         case selector of
  120.             kSetup: 
  121.                 begin
  122.                     pb^.requiredGlobals := 0;
  123.                     pb^.versionNumber := VERSIONNUMBER;
  124.                     if sizeof(extended) = 10 then
  125.                         pb^.codeType := CPU68noFPU
  126.                     else if sizeof(extended) = 12 then
  127.                         pb^.codeType := CPU68FPU
  128.                     else
  129.                         pb^.codeType := CPUPowerPC;
  130.  
  131.                     SetUp(pb^.moduleKind, pb^.name, pb^.requiredGlobals, pb);
  132.                 end;
  133.             progInitialize: 
  134.                 InitializeProg(pb);
  135.             progRun: 
  136.                 Run(pb);
  137.             kCleanUp: 
  138.                 CleanUp(pb);
  139.             otherwise
  140.         end;
  141. {$IFC NOT UNDEFINED SET_A4}
  142.         oldA4 := SetA4(oldA4);
  143. {$ENDC}
  144.     end;
  145.  
  146.  
  147.  
  148. end.